﻿using Library.Collections.Generic;
using Library.Collections.Specialized;
using System;
using Library.Linq.Expressions;
using Library.Logic.Constraints;
using TRULE = System.Linq.Expressions.Expression<System.Func<System.Linq.IQueryable<System.Linq.Expressions.Expression>, System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable<System.Linq.Expressions.Expression>>>>;
using TEXPRESSION = System.Linq.Expressions.Expression;

namespace Library.Xml
{
    public abstract class XmlTreeEvent
    {
        public XmlTreeEvent(IXmlTreeReadOnly node)
        {
            this.node = node;
        }
        IXmlTreeReadOnly node;

        public IXmlTreeReadOnly Node
        {
            get
            {
                return node;
            }
        }
    }

    public interface IXmlTreeReadOnly :
        ITreeReadOnly<IXmlTreeReadOnly>,
        ITreeRoot<IXmlTreeReadOnly>,
        ITreeParent<IXmlTreeReadOnly>,
        ILinkedListNode<IXmlTreeReadOnly>,
        IHasAttributesReadOnly<Uri, string>,
        IHasName<Uri>,
        IHasValueReadOnly<string>,
        IHasConstraintsReasonReadOnly
    {
        //new IDictionaryVectorReadOnly<Uri, string> Attributes { get; }
    }

    public interface IXmlTree :
        ITree<IXmlTree>,
        ITreeRoot<IXmlTree>,
        ITreeParent<IXmlTree>,
        ILinkedListNode<IXmlTree>,
        IHasAttributes<Uri, string>,
        IHasValue<string>,
        IXmlTreeReadOnly,
        IObservable<XmlTreeEvent>
    {
        //new IDictionaryList<Uri, string> Attributes { get; }
    }
}
